package leetcode.ArrayAndString;

public class MoveZeroes {
    /**
     * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，
     * 同时保持非零元素的相对顺序。
     * <p>
     * 必须在原数组上操作，不能拷贝额外的数组。
     * 尽量减少操作次数。
     */

    public static void moveZeroes(int[] nums) {
        if(nums == null || nums.length == 0)
            return ;
        int length = nums.length;
        for (int i = 0; i <length ; i++) {
            if(nums[i]==0){
                int temp = i;
                for(int j = temp+1;j<length;j++){
                    if(nums[j]!=0){
                        swap(nums,temp,j);
                        temp = j;
                    }
                }

            }
        }

    }
    private static void swap(int[] ch, int i, int j) {
        int temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
    }

    public static void betterMoveZeroes(int[] nums) {
        if(nums == null || nums.length == 0)
            return ;
        int j = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != 0){
                nums[j] = nums[i];
                if(i != j)
                    nums[i] = 0;
                j++;
            }
        }
    }

    public static void main(String[] args) {
        betterMoveZeroes(new int[]{0,1,0,3,12});
    }
}
